package com.cskaoyan.bytestream.buffer;

import java.io.*;

/*
        字节缓冲流
           1.字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多，这是加入了数组这样的缓冲区效果
           2.java本身在设计的时候，也考虑到了这样的情况，所以提供了字节缓冲区流


           字节缓冲输出流
             BufferedOutputStream(OutputStream out)
             创建一个新的缓冲输出流，以将数据写入指定的底层输出流。


           字节缓冲输入流
            BufferedInputStream(InputStream in)
               创建一个 BufferedInputStream 并保存其参数，即输入流 in，以便将来使用。

           实现文件复制


        缓冲流：要创建缓冲流对象，必须在构造方法中，接收一个普通的相应类型数输入/输出字节流对象，即
               缓冲流，是基于一个已有的底层字节流，创建出来的。

       包装流：
       a.看起来缓冲流，是通过包装了一个底层普通字节流，得到的，这种流，我们统称为包装流
       b.在关闭流的时候，只需要关闭，包装流，不需要关闭包装流所包装的底层流，因为包装流自己会负责自己所包装的底层流






 */
public class Demo1 {

    public static void main(String[] args) throws IOException {

        FileOutputStream fos = new FileOutputStream("b.txt");
        // 创建缓冲字节输出流对象
        OutputStream bos = new BufferedOutputStream(fos);


        // 创建缓冲字节输入流对象
        FileInputStream fis = new FileInputStream("d:\\one\\a.txt");
        InputStream bis = new BufferedInputStream(fis);

        // 文件复制
        byte[] byteBuf = new byte[1024];
        int count;
        while ((count = bis.read(byteBuf)) != -1) {

            bos.write(byteBuf, 0, count);
        }

        // 关闭流 (只需要调用包装流的close方法即可，包装流会自己负责close自己所包装的底层流)
        bos.close();
        bis.close();




    }
}
